<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        // 特点1 小括号可以省略 
        // var fn1 = function(){
        //     console.log("fn1");
        // }
        // var fn1 = ()=>{console.log("fn1");}

        // var fn2 = num1 =>{console.log(num1);}
        // fn2(100);
        // // function fn2(num1){
        // //     console.log(num1);
        // // }

        // var fn3 = (num1,num2) =>{console.log(num1+num2);}
        // fn3(100,200);
        // function fn3(num1,num2){
        //     console.log(num1+num2);
        // }

        // 大括号可以省略的情况  


        // var fn4 = (num1,num2) =>{return num1+num2;}
        // var fn4 = (num1,num2) => num1+num2;
        // function fn4(num1,num2){
        //     return num1+num2;
        // }

        // var arrs = [
        //     {id:1,name:"张三",age:20},
        //     {id:2,name:"李四",age:30},
        //     {id:3,name:"王五",age:40},
        //     {id:4,name:"赵六",age:50},
        // ]
        // var id = 2
        // var person = arrs.find(function(item){
        //     return item.id == id;
        // })
        // var person1 = arrs.find((item) => {return item.id == id;});
        // var person2 = arrs.find( item => {return item.id == id;});
        // var person3 = arrs.find( item => item.id == id);

        // console.log(person);
        // console.log(person1);
        // console.log(person2);
        // console.log(person3);


        // function adds(num1,num2,num3,num4,num5){
        //     return num1+num2+num3+num4+num5; // 求所有形参的和 
        //     // 1 个  2 个  3 个  4 个  5 个可以直接写形参
        //     //假如用户100个实参 得有100个形参来接收
        //     // 也就是用户得写100个形参 不现实
        // }
        
        // function adds(){
        //     // console.log(arguments);
        //     var sum = 0
        //     for(var i=0;i<arguments.length;i++){
        //         sum += arguments[i];
        //     }
        //     alert(sum)
        // }

        // adds(1,2,3,2,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,3);

        // 阶乘 

        // 10!    10*9*8*7*6*5*4*3*2*1
        // 5!     5*4*3*2*1

        // function jiecheng1(num){
        //     if(num == 1) return 1;
        //     return num*jiecheng(num-1);
        // }
        // 上面会报错  里边的函数没有跟着外边一起改 
        
        function jiecheng3(num){
            console.log(arguments.callee);
            if(num == 1) return 1;
            return num*arguments.callee(num-1);
        }
        // 不管外边怎么改 里边始终是调用外边的函数 

        // jiecheng(10) = 10*jiecheng(9)
        // jiecheng(9) = 9*jiecheng(8)
        // jiecheng(8) = 8*jiecheng(7)
        // jiecheng(7) = 7*jiecheng(6)
        // jiecheng(6) = 6*jiecheng(5)
        // jiecheng(5) = 5*jiecheng(4)
        // jiecheng(4) = 4*jiecheng(3)
        // jiecheng(3) = 3*jiecheng(2)
        // jiecheng(2) = 2*jiecheng(1) -> 1停止

        // console.log(jiecheng3(10));
        // 函数自己调用自己
        // 递归函数 外边函数名改了 里边的函数名也要改
         // 因为改了外边 里边的函数名没有改 就找不到 

         // 需求 外边的函数改 里边也跟着改 



         // arguments 
         // arguments.callee  


        //  var fn5 = () => {
        //      console.log(arguments);
        //  }
    

        // fn5(1,2,3,4,5,6,7,8,9,10); //arguments is not defined
    
        // function fn6(){
        //     console.log(this);
        // }

    //     document.onclick = function(){
    //         console.log(this); // #doucment
    //     }

    //     var obj = {
    //         name:"张三",
    //         fn:function(){
    //             console.log(this); // 这个对象
    //         }
    //     }
    // obj.fn();

    // document.onclick = ()=>{ console.log(this); }
    // // 箭头函数父函数是window  this 就是window
    // var obj1 = {
    //     name:"张三",
    //     fn:()=>{ console.log(this); }
    // }
    // obj1.fn(); // fn 父函数是window  this 就是window

    // 箭头函数的this 取决于父函数的this    

    setTimeout(function(){
        console.log(this); // window

        var fn = () => {
            console.log(this); // 
        }
        fn();
    },1000)




    </script>

</body>
</html>